
#ifndef IUpdateable_h
#define IUpdateable_h

#include <Defines.h>
#include <CSharpPropertyMethods.h>

#include <REvents.h>
#include <System/Generic/EventHandler.h>
#include <System/EventArgs.h>
#include <System/Object.h>
#include <System/IDisposable.h>

#include "GameTime.h"

namespace Riccsson
{
	namespace Xna
	{
		namespace Framework
		{
	        interface IUpdateable
	        {
		        virtual void Update(GameTime gameTime) = 0;
		
				event<Void, Riccsson::System::Generic::EventHandler<Riccsson::System::EventArgs>> EnabledChanged;
		        event<Void, Riccsson::System::Generic::EventHandler<Riccsson::System::EventArgs>> UpdateOrderChanged;
	
		        virtual PROP3_GET(bool, Enabled) = 0;
				private: PROP3_SET(bool, Enabled) {throw;}
				
				virtual PROP3_GET(int, UpdateOrder) = 0;
				private: PROP3_SET(int, UpdateOrder) {throw;}
	        };
        }
    }
}

#endif